package co.edu.uniquindio.sicorrespondencia.entities;

import java.io.Serializable;
import java.util.List;

import javax.persistence.*;

import org.jboss.seam.annotations.Name;

import co.edu.uniquindio.sicorrespondencia.enums.Tipo;

/**
 * Esta entidad representa el docente y sus datos correspondientes
 * 
 * @author Tannia Rosero
 * @author Sofia Agudelo
 * 
 */
@Entity
@Table(name = "docente")
@Name("docente")
public class Docente implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "codigoDocente")
	private Long codigoDocente;

	@Column(name = "apellidoDocente")
	private String apellidoDocente;

	@Column(name = "emailDocente")
	private String emailDocente;

	@Column(name = "nombreDocente")
	private String nombreDocente;

	@Column(name = "postGradosDocente")
	private String postGradosDocente;

	@Column(name = "telefonoDocente")
	private int telefonoDocente;

	
	private Tipo tipoDocente;

//	@ManyToMany(cascade=CascadeType.ALL)
//	@JoinTable(name = "docente_trabajo_grado",
//	joinColumns = {
//	@JoinColumn(name="codigoDocente") 
//	},
//	inverseJoinColumns = {
//	@JoinColumn(name="idTG")
//	
//	}
//	)
//	private List<TrabajoGrado> trabajosGrado;
	
	@OneToMany(mappedBy = "codDocente")
	@Column(name = "docenteTG")
	private List<DetalleDocente_TG>docenteTG;
	
	
	public Docente() {
	}

	/**
	 * Este metodo permite obtener codigoDocente de la clase
	 * 
	 * @return el codigoDocente
	 */
	public Long getCodigoDocente() {
		return codigoDocente;
	}

	/**
	 * Este metodo permite fijar el codigoDocente de la entidad
	 * 
	 * @param codigoDocente
	 *            es el codigoDocente a fijar
	 */
	public void setCodigoDocente(Long codigoDocente) {
		this.codigoDocente = codigoDocente;
	}

	/**
	 * Este metodo permite obtener apellidoDocente de la clase
	 * 
	 * @return el apellidoDocente
	 */
	public String getApellidoDocente() {
		return apellidoDocente;
	}

	/**
	 * Este metodo permite fijar el apellidoDocente de la entidad
	 * 
	 * @param apellidoDocente
	 *            es el apellidoDocente a fijar
	 */
	public void setApellidoDocente(String apellidoDocente) {
		this.apellidoDocente = apellidoDocente;
	}

	/**
	 * Este metodo permite obtener emailDocente de la clase
	 * 
	 * @return el emailDocente
	 */
	public String getEmailDocente() {
		return emailDocente;
	}

	/**
	 * Este metodo permite fijar el emailDocente de la entidad
	 * 
	 * @param emailDocente
	 *            es el emailDocente a fijar
	 */
	public void setEmailDocente(String emailDocente) {
		this.emailDocente = emailDocente;
	}

	/**
	 * Este metodo permite obtener nombreDocente de la clase
	 * 
	 * @return el nombreDocente
	 */
	public String getNombreDocente() {
		return nombreDocente;
	}

	/**
	 * Este metodo permite fijar el nombreDocente de la entidad
	 * 
	 * @param nombreDocente
	 *            es el nombreDocente a fijar
	 */
	public void setNombreDocente(String nombreDocente) {
		this.nombreDocente = nombreDocente;
	}

	/**
	 * Este metodo permite obtener postGradosDocente de la clase
	 * 
	 * @return el postGradosDocente
	 */
	public String getPostGradosDocente() {
		return postGradosDocente;
	}

	/**
	 * Este metodo permite fijar el postGradosDocente de la entidad
	 * 
	 * @param postGradosDocente
	 *            es el postGradosDocente a fijar
	 */
	public void setPostGradosDocente(String postGradosDocente) {
		this.postGradosDocente = postGradosDocente;
	}

	/**
	 * Este metodo permite obtener telefonoDocente de la clase
	 * 
	 * @return el telefonoDocente
	 */
	public int getTelefonoDocente() {
		return telefonoDocente;
	}

	/**
	 * Este metodo permite fijar el telefonoDocente de la entidad
	 * 
	 * @param telefonoDocente
	 *            es el telefonoDocente a fijar
	 */
	public void setTelefonoDocente(int telefonoDocente) {
		this.telefonoDocente = telefonoDocente;
	}

	/**
	 * Este metodo permite obtener tipoDocente de la clase
	 * 
	 * @return el tipoDocente
	 */
	@Column(name = "tipoDocente")
	@Enumerated (EnumType.STRING)
	public Tipo getTipoDocente() {
		return tipoDocente;
	}

	/**
	 * Este metodo permite fijar el tipoDocente de la entidad
	 * 
	 * @param tipoDocente
	 *            es el tipoDocente a fijar
	 */
	public void setTipoDocente(Tipo tipoDocente) {
		this.tipoDocente = tipoDocente;
	}


	/**
	 * Este metodo permite obtener docenteTG de la clase
	 * @return el docenteTG
	 */
	public List<DetalleDocente_TG> getDocenteTG() {
		return docenteTG;
	}

	/**
	 * Este metodo permite fijar el docenteTG de la entidad
	 * @param docenteTG es el docenteTG a fijar
	 */
	public void setDocenteTG(List<DetalleDocente_TG> docenteTG) {
		this.docenteTG = docenteTG;
	}

	

}